package com.javatoc.compress.toinvoke;

/**
 * 视频压缩处理的java接口
 * 
 * @author liujun
 * @version 1.0.0
 * @since 2017年9月7日 上午11:10:20
 */
public class compressMove {

	/**
	 * 功能：初始化视频压缩系统，一个进程该函数仅需调用一次。并且需要使用本系统任何函数之前调用。 参数：无
	 * 返回值：系统初始化成功返回ZCVZIP_SUCCESSED，否则返回ZCVZIP_FAILED
	 * 说明：如果系统初始化不成功，则后继的系统调用同样不会成功
	 * 
	 * @return
	 */
	public native int ZcvZipInit();

	/**
	 * 功能：视频压缩系统析构函数，一个进程该函数仅需调用一次。 本函数在需要结束本系统的工作时调用。
	 */
	public native void ZcvZipDeInit();

	/**
	 * 功能：构建一个压缩编码工作实例时，需要首先调用该函数，用于获取工作实例句柄。 参数：无
	 * 返回值：工作实例构建成功则返回工作实例句柄，是一个大于等于0的整数，失败则返回-1。
	 * 说明：在实施压缩编码工作之初，获取工作实例句柄是必须的步骤，句柄是后继工作得以正常运行的唯一标识。
	 * 
	 * @return
	 */
	public native int ZcvZipCreate();

	/**
	 * 功能：释放工作实例句柄。在完成一个文件压缩编码后，需要释放工作句柄。 参数：将要被释放的工作实例句柄 返回值：无 说明：
	 * 
	 * @param hndl
	 */
	public native void ZcvZipRelease(int hndl);

	/**
	 * 功能：压缩编码函数
	 * 
	 * @param hndl
	 *            工作实例句柄
	 * @param inFilename
	 *            输入媒体文件的全路径名称。 压缩编码器自动识别输入文件的类型，一般常用的媒体文件类型均能够识别并正确解析。
	 * 
	 * @param outFilename
	 *            出的媒体文件全路径名称。 压缩编码器自动识别文件的类型，一般常用的媒体文件类型均能够识别并正确打包。
	 * 
	 * @param vbitrate
	 *            压缩后视频的码率。（单位： k）
	 * @param abitrate
	 *            对于压缩视频的质量定义，本软件使用vbitrate和quality两个变量来定义，使用者可以依据自身的需要，选择使用。
	 *            如果定义中不希望使用码率来定义质量，那么可以将vbitrate设置为-1，则本变量失效，
	 *            系统会检查quality变量的有效性。
	 * 
	 * @param keyint
	 *            I帧间隔。
	 *            Keyint变量用于定义最小的I帧间隔，如果不使用该定义，则可以设置为小于0的数据，此时变量失效，系统会依据默认值运行。
	 *            默认值：100
	 * 
	 * @param bframes
	 *            设置一个GOP中最大B帧数量。 定义为小于等于0的数值，则该变量失效。系统会依据圧缩过程的实际情况，决定B帧的使用
	 * 
	 * @param quality
	 *            视频压缩编码质量定义。
	 *            quality和vbitrate共同定义视频编码质量和压缩率，在vbitrate无效的情况下，使用quality约束压缩质量
	 *            ，quality参数数值越小压缩比越小，数值越大压缩比越大。
	 *            同样的，当quality小于等于0时，quality参数失效，系统会以默认参数运行。
	 *            建议quality不小于20，不大于40。
	 * 
	 * @param width
	 *            定义压缩后视频的宽度 设置为小于等于0的数据，变量失效，视频保持原有的宽度。
	 * 
	 * @param height
	 *            定义压缩后视频的高度
	 * @param fps
	 *            压缩后视频的帧率设置
	 * @return
	 */
	public native int ZcvZipProcess(int hndl, String inFilename, String outFilename, int vbitrate, int abitrate,
			int keyint, int bframes, float quality, int width, int height, int fps);

}